package com.td.framework.webmanager.listener;

import java.util.Vector;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


/**
 * 
 * Title: 在线用户数量统计
 * Description: 用于统计当前登录用户的数量
 * Copyright: Copyright (c) 2008
 * Company 北京水软科技有限公司
 *
 * @author FLT007
 * @version 1.0
 */
public class OnlineUserCounterListener implements HttpSessionListener {

	 @SuppressWarnings("unchecked")
	private static  Vector users=new Vector();
	/**
	 * 将登陆用户放入VECTOR中
	 */ 
	@SuppressWarnings("unchecked")
	public void sessionCreated(HttpSessionEvent arg0) {
		users.trimToSize();
		String sessId = arg0.getSession().getId();
	    if(!existUser(sessId)){
	        users.add(sessId);
	        
	        //System.out.print(sessId+"\t登录到系统\t"+(new Date()));
	        //System.out.println("当前在线用户数为："+getCount());
	    }
	        //System.out.println(sessId+"已经存在");
	} 
	/**
	 * 将登录用户从VECTOR中删除
	 */
	public void sessionDestroyed(HttpSessionEvent arg0) {
	    users.trimToSize();
		String sessId = arg0.getSession().getId();
	    deleteUser(sessId);

	    //System.out.print(sessId+"\t退出系统\t"+(new Date()));
	   // System.out.println("在线用户数为："+getCount());

	}
	
	/**
	 * 获取用户数量
	 * @return
	 */
   public static int getCount(){
       users.trimToSize();//调整Vector users的容量为Vector users的大小
       return users.capacity();//返回users的容量
   }
   /**
    * 判断是用户是否存在
    * @param yhbh
    * @return
    */
   public boolean existUser(String yhbh){
       users.trimToSize();
       boolean existUser=false;
       for (int i=0;i<users.capacity();i++ ){
           if (yhbh.equals((String)users.get(i))){
               existUser=true;
               break;
           }
       }
       return existUser;
   }
   /**
    * 删除存在的用户
    * @param yhbh
    * @return
    */
   public boolean deleteUser(String yhbh) {
       users.trimToSize();
       if(existUser(yhbh)){
           int currUserIndex=-1;
           for(int i=0;i<users.capacity();i++){
               if(yhbh.equals((String)users.get(i))){
                   currUserIndex=i;
                   break;
               }
           }
           if (currUserIndex!=-1){
               users.remove(currUserIndex);
               users.trimToSize();
               return true;
           }
       }
       return false;
   }
   
   public static void main(String[] args){
	  // OnlineUserCounterListener onlineUser=new OnlineUserCounterListener();
	   //System.out.println(onlineUser.getCount());
   }
}
